#include "m0wig.h"
#include "ui_m0wig.h"
#include "globalval.h"

M0Wig::M0Wig(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::M0Wig)
{
    ui->setupUi(this);
    textBrowser = ui->textBrowser; // 假设textBrowser是界面中的一个QTextBrowser
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_publishButton_clicked()));
}

M0Wig::~M0Wig()
{
    delete ui;
}


QString M0Wig::getValueForKey(QMap<int, QString> map, int key) {
    if (map.contains(key)) {
        return map.value(key);
    } else {
        return "Key not found";
    }
}
void M0Wig::on_publishButton_clicked()
{
    // 创建JSON对象
    QJsonObject jsonObject;

    // 添加控制指令类型
    jsonObject["type"] = QJsonValue(2);

    // 创建数据子对象
    QJsonObject dataObject;

    // 添加数据点唯一标识和数据点键值
    dataObject["key"] = QJsonValue(103);

    if(ui->pushButton->text()=="开空调")
        dataObject["val"] = QJsonValue("22.5");

    // 将数据子对象添加到主对象
    jsonObject["data"] = dataObject;

    // 创建QJsonDocument并添加JSON对象
    QJsonDocument jsonDoc(jsonObject);

    // 将JSON文档序列化为字符串
    QString jsonString = jsonDoc.toJson(QJsonDocument::Compact);

    // 创建一个QMQTT::Message对象
    QMQTT::Message message;
    message.setTopic("lc"); // 设置发布的主题
    message.setPayload(jsonString.toUtf8()); // 设置消息内容，注意转换
    message.setQos(1); // 设置服务质量等级

    // 使用MqttHandler实例发布消息
    quint16 messageId = GlobalVal::mqtt->publish(message);
    qDebug() << "Message published with ID" << messageId;
}

void M0Wig::dataUpSlot(QByteArray data)
{
    // 反序列化JSON数据
    QJsonDocument doc = QJsonDocument::fromJson(data);
    // 创建一个用于存储键值对的QMap
    QMap<int, QString> keyValueMap;

    if (!doc.isNull() && doc.isObject()) {
        QJsonObject json = doc.object();


        // 解析type字段
        if (json.contains("type") && json["type"].isDouble()) {
            int type = json["type"].toInt();
            // 可以选择将type也存储在map中，或者直接显示
            textBrowser->append("Type: " + QString::number(type));
        }

        // 解析result字段
        if (json.contains("result") && json["result"].isDouble()) {
            int result = json["result"].toInt();
            // 可以选择将result也存储在map中，或者直接显示
            textBrowser->append("Result: " + QString::number(result));
        }

        // 解析data数组
        if (json.contains("data") && json["data"].isArray()) {
            QJsonArray dataArray = json["data"].toArray();
            // 遍历QJsonArray，并填充keyValueMap
            for (int i = 0; i < dataArray.size(); ++i) {
                QJsonValue value = dataArray.at(i);
                if (value.isObject()) {
                    QJsonObject dataObj = value.toObject();

                    // 解析key和val字段
                    if (dataObj.contains("key") && dataObj["key"].isDouble() &&
                        dataObj.contains("val") && dataObj["val"].isString()) {
                        int key = dataObj["key"].toInt();
                        QString val = dataObj["val"].toString();
                        keyValueMap.insert(key, val); // 将键值对存储到map中
                    }
                }
            }
        }

    } else {
        // 如果JSON数据无效，输出错误信息
        textBrowser->append("Invalid JSON data");
    }
    QString valueFor103 = getValueForKey(keyValueMap, 103);
    textBrowser->append("Value for key 103: " + valueFor103);
}
